﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.Foundation;
using System.Runtime.InteropServices;
using System.IO;
using Windows.UI.Xaml.Controls.Primitives;
using FlyOut();
namespace Pass.Recursos
{
    class Controle
    {
        public List<Recursos.Senha> _ListaSenha = new List<Recursos.Senha>();
        private string _arquivo;
        /// <summary>
        /// Contrutor
        /// </summary>
        /// <param name="Arquivo">O nome do arquivo que sera usado para leituar e gravação das senhas</param>
        public Controle(string Arquivo)
        {
            _arquivo = Arquivo;
            //constroi();
        }

        /// <summary>
        /// Syncronisa as informações da _ListaSenha com o arquivo _arquivo
        /// </summary>
        public async void ApplyLog()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Recursos.Senha>));
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            StorageFile file = await folder.CreateFileAsync(_arquivo,CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream writeStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                serializer.Serialize(writeStream.AsStream(), _ListaSenha);
                writeStream.Dispose();
            }

        }

        /// <summary>
        /// Carregas as informações continas no _arquivo no _ListaSenha
        /// </summary>
        public async void OpenFileData()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Recursos.Senha>));
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            Stream file = await folder.OpenStreamForReadAsync(_arquivo);
            file.Position = 0;
            _ListaSenha = (List<Recursos.Senha>)serializer.Deserialize(file);
            file.Dispose();
            

            folder = null;
            file = null;
        }

        /// <summary>
        /// Adcioan uma nova informaçao de senhas a o _arquivo
        /// </summary>
        /// <param name="Titulo">Titulo da senha</param>
        /// <param name="Senha">A senha que o usuario escolheu para o log</param>
        /// <param name="Obs">A obs do log</param>
        public void Add(string Titulo, string Senha, string Obs)
        {
            Recursos.Senha senha = new Senha();
            senha._obs = Obs;
            senha._Senha = Senha;
            senha._Titulo = Titulo;
            _ListaSenha.Add(senha);
        }
        private async void constroi ()
        {
            Senha senha = new Senha();
            senha._obs = "teste";
            senha._Senha ="teste";
            senha._Titulo="teste";

            XmlSerializer serializer = new XmlSerializer(typeof(List<Recursos.Senha>));
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            StorageFile file = await folder.CreateFileAsync(_arquivo, CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream writeStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                _ListaSenha.Add(senha);
                serializer.Serialize(writeStream.AsStream(), _ListaSenha);
                writeStream.Dispose();
            }

        }
    }    
}
